﻿#define  _CRT_SECURE_NO_WARNINGS 1

//#include <stdio.h>
//#define size 10
//int main()
//{
//	//char c[5] = { 'a', 'b', '\0', 'c', '\0' };
//	//printf("%s", c);
//	char str1[size], str2[size + 2];
//	return 0;
//}


//描述
//Lily上课时使用字母数字图片教小朋友们学习英语单词，每次都需要把这些图片按照大小（ASCII码值从小到大）排列收好。请大家给Lily帮忙，通过代码解决。
//Lily使用的图片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。
//数据范围：每组输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000
//输入描述：
//一行，一个字符串，字符串中的每个字符表示一张Lily使用的图片。
//输出描述：
//Lily的所有图片按照从小到大的顺序输出
// https://www.nowcoder.com/practice/2de4127fda5e46858aa85d254af43941?tpId=37&&tqId=21257&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking
//#include <stdio.h>
//#include <string.h>
//int cmp(const void* e1, const void* e2)
//{
//    return *(char*)e1 - *(char*)e2;
//}
//int main()
//{
//    char str[1001] = { 0 };
//    while (scanf("%s", str) != EOF)
//    {
//        int len = strlen(str);
//        qsort(str, len, sizeof(str[0]), cmp);
//        printf("%s\n", str);
//    }
//    return 0;
//}


//描述
//编写一个函数，计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内(0~127 ，包括 0 和 127)，换行表示结束符，不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
//例如，对于字符串 abaca 而言，有 a、b、c 三种不同的字符，因此输出 3 。
//数据范围： 1 \le n \le 500 \1≤n≤500
//输入描述：
//输入一行没有空格的字符串。
//输出描述：
//输出 输入字符串 中范围在(0~127，包括0和127)字符的种数。
//https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50?tpId=37&&tqId=21233&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking
//#include <stdio.h>
//#include <string.h>
//int char_num(char* str, int len)
//{
//    char nums[128];
//    int nums_len = 0;
//    int i = 0;
//    for (i = 0; i < len; i++)
//    {
//        if (*(str + i) >= 0 && *(str + i) <= 127)
//        {
//            int j = 0;
//            for (j = 0; j < nums_len; j++)
//            {
//                if (nums[j] == *(str + i))
//                    break;
//            }
//            if (j == nums_len)
//            {
//                nums[nums_len] = *(str + i);
//                nums_len++;
//            }
//        }
//    }
//    return nums_len;
//}
//int main()
//{
//    char str[501];
//    scanf("%s", str);
//    int len = strlen(str);
//    int n = char_num(str, len);
//    printf("%d\n", n);
//    return 0;
//}

//优解！
//#include <stdio.h>
//int main()
//{
//	char tmp[501] = {0};
//	while(~scanf("%s", tmp))
//	{
//		char table[128] = {0}, *ptr = tmp;
//		int count = 0; 
//		while(*ptr != '\0') 
//		{
//			if (table[*ptr] != 1){//判断字符ascii值作为下标的位置是否被标记过，是否是重复字符
//				count++;//当前字符的位置没有被标记过表示没有出现过，则计数+1
//			}
//			table[*ptr++] = 1;//将字符ascii值作为下标的位置进行标记置1
//		}
//		printf("%d\n", count);
//	}
//	return 0;
//}



//给定一个大小为 n 的数组 nums ，返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n / 2 ⌋ 的元素。
//你可以假设数组是非空的，并且给定的数组总是存在多数元素
//来源：力扣（LeetCode）
//链接：https ://leetcode.cn/problems/majority-element
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//int majorityElement(int* nums, int numsSize) {
//	int count = 1;
//	int tmp = nums[0];
//	for (int i = 1; i < numsSize; i++)
//	{
//		if (tmp == nums[i]) {//与保存的字符相同则计数+1
//			count++;
//		}
//		else {//与保存的字符不同则计数-1
//			count--;
//			//计数为0表示有可能保存的字符不是最多的字符，换下一个
//			if (count == 0)
//				tmp = nums[i + 1];
//		}
//	}
//	return tmp;
//}



//给你一个整数数组 nums ，请计算数组的 中心下标 。
//数组 中心下标 是数组的一个下标，其左侧所有元素相加的和等于右侧所有元素相加的和。
//如果中心下标位于数组最左端，那么左侧数之和视为 0 ，因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
//如果数组有多个中心下标，应该返回 最靠近左边 的那一个。如果数组不存在中心下标，返回 - 1 。
//来源：力扣（LeetCode）
//链接：https ://leetcode.cn/problems/find-pivot-index
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//int pivotIndex(int* nums, int numsSize) {
//    int i = 0;
//    for (i = 0; i < numsSize; i++)
//    {
//        int left_num = 0, right_num = 0;
//        int j = 0;
//        for (j = 0; j < i; j++)
//        {
//            left_num += *(nums + j);
//        }
//        for (j = i + 1; j < numsSize; j++)
//        {
//            right_num += *(nums + j);
//        }
//        if (left_num == right_num)
//            return i;
//    }
//    return -1;
//}